package com.dms.modules.order.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.dms.modules.order.entity.Coupon;
import com.dms.modules.order.mapper.CouponMapper;
import com.dms.modules.order.service.CouponService;
import org.springframework.stereotype.Service;

import java.time.LocalDateTime;
import java.util.List;

/**
 * 优惠券服务实现类
 */
@Service
public class CouponServiceImpl extends ServiceImpl<CouponMapper, Coupon> implements CouponService {

    @Override
    public List<Coupon> getAvailableCoupons() {
        // 查询所有可用优惠券
        LambdaQueryWrapper<Coupon> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(Coupon::getStatus, 1) // 已启用
                   .gt(Coupon::getRemain, 0) // 还有剩余
                   .lt(Coupon::getStartTime, LocalDateTime.now()) // 已开始
                   .gt(Coupon::getEndTime, LocalDateTime.now()) // 未结束
                   .eq(Coupon::getDeleted, 0); // 未删除
        
        return list(queryWrapper);
    }

    @Override
    public List<Coupon> getMerchantCoupons(Long merchantId) {
        if (merchantId == null) {
            return getAvailableCoupons();
        }
        
        // 查询商家可用优惠券
        LambdaQueryWrapper<Coupon> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(Coupon::getStatus, 1) // 已启用
                   .gt(Coupon::getRemain, 0) // 还有剩余
                   .lt(Coupon::getStartTime, LocalDateTime.now()) // 已开始
                   .gt(Coupon::getEndTime, LocalDateTime.now()) // 未结束
                   .eq(Coupon::getDeleted, 0) // 未删除
                   .and(wrapper -> wrapper
                           .eq(Coupon::getMerchantId, merchantId) // 指定商家
                           .or()
                           .isNull(Coupon::getMerchantId)); // 或全平台通用
        
        return list(queryWrapper);
    }

    @Override
    public List<Coupon> getCategoryCoupons(Long categoryId) {
        if (categoryId == null) {
            return getAvailableCoupons();
        }
        
        // 查询分类可用优惠券
        LambdaQueryWrapper<Coupon> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(Coupon::getStatus, 1) // 已启用
                   .gt(Coupon::getRemain, 0) // 还有剩余
                   .lt(Coupon::getStartTime, LocalDateTime.now()) // 已开始
                   .gt(Coupon::getEndTime, LocalDateTime.now()) // 未结束
                   .eq(Coupon::getDeleted, 0) // 未删除
                   .and(wrapper -> wrapper
                           .eq(Coupon::getCategoryId, categoryId) // 指定分类
                           .or()
                           .isNull(Coupon::getCategoryId)); // 或全场通用
        
        return list(queryWrapper);
    }
} 